package com.wjw.java.others.interface_.demo;

/**
 * 接口：就是给出一些没有实现的方法,封装到一起,到某个类中要使用的时候,具体去实现那些方法
 * -----------------------------------------------------------------------------
 * 语法:
 * interface 接口名{
 *     //属性
 *     //default和static修饰的方法
 *     //抽象方法
 * }
 *
 * class 类名 implements 接口{
 *     //自己的属性
 *     //自己的方法
 *     //必须实现接口中的所有抽象方法
 * }
 * -----------------------------------------------------------------------------
 * 小结：
 * 1.在接口中,抽象方法可以省略abstract
 * 1.在jdk1.7之前,接口中的方法都没有方法体,都是抽象方法
 * 2.在jdk1.8后,接口中可以有static静态方法,默认方法,接口中可以有具体的方法实现
 * -----------------------------------------------------------------------------
 * 接口的多态：接口的引用指向其实现类
 * 1.向上转型
 * 接口 接口名 = new 接口的实现类();
 * 如：UserService uService = new UserServiceImpl();
 *
 * 2.向下转型,可以调用实现类特有的方法
 * 接口的实现类 实现类名 = (接口的实现类) 接口名;
 * UserServiceImpl impl = (UserServiceImpl) uService;
 *
 * 3.接口的实现类可以做为方法的形参(多态形参)
 * 4.数组的类型可以是接口类型(多态数组)
 * -----------------------------------------------------------------------------
 * 细节：
 * 1.接口不能被实例化：DBInterface db = new DBInterface();错误
 * 2.接口中所有方法都是public方法,接口中的抽象方法可以省略public abstract
 * 3.一个类实现了接口,就必须实现该接口中的所有抽象方法
 * 4.抽象类实现接口,可以不实现接口中的抽象方法
 * 5.一个类可以实现多个接口
 * 6.接口中的属性(都是常量),只能是public static final修饰的,且必须初始化
 * 7.访问接口中的属性：接口.属性名
 * 8.接口不能继承extends其他类,但是能实现implements多个其他接口
 * 9.接口中的修饰符只能是public和default,这一点和类的修饰符是一样的
 * -----------------------------------------------------------------------------
 * 继承VS接口
 * 1.继承提高了代码的复用性和可维护性,
 * 2.接口是一种规范,让实现类去实现接口中的方法,更加的灵活
 * -----------------------------------------------------------------------------
 */
public interface DBIterface {//数据库接口
    //1.属性
    int num = 100;//此处省略了public static final

    //2.default和static修饰的方法
    //default修饰方法,这里的default和访问修饰符default(什么都不写),不一样
    public default void defaultMethod(){
        System.out.println("接口中的default默认方法");
    }
    public static void staticMethod(){
        System.out.println("接口中的static静态方法");
    }

    //3.接口中的抽象方法,可以省略public abstract
    public void start();//省略了abstract,一般不写
    void stop();//省略了public abstract,一般不写
}
